Skip to content

ci: bump AppVeyor macOS image to Sonoma - #940

Merged
KirillOsenkov merged 3 commits into
mainfrom
copilot/update-macos-build-worker-image
Apr 1, 2026
Merged

ci: bump AppVeyor macOS image to Sonoma#940
KirillOsenkov merged 3 commits into
mainfrom
copilot/update-macos-build-worker-image

Conversation

Copilot AI commented Mar 31, 2026

Copy link
Copy Markdown
Contributor
  • Bump AppVeyor macOS image to macos-sonoma
  • Add HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 prefix to brew install create-dmg to prevent cmake symlink conflicts during dependents upgrade check
Original prompt

In appveyor.yml at line 12, the macOS build worker image is set to the generic macOS, which maps to the oldest available image (Monterey 12). This is causing issues with stale pre-installed software (e.g., Homebrew cmake symlink conflicts when installing create-dmg).

Change line 12 from:

appveyor_build_worker_image: macOS

to:

appveyor_build_worker_image: macos-sonoma

This bumps the macOS CI leg to macOS 14 Sonoma, which is the newest macOS image available on AppVeyor.

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: on my https://github.com/KirillOsenkov/MSBuildStructuredLog there's an AppVeyor CI, and the mac leg fails, here's a log excerpt:

[00:33:58] Error: The brew link step did not complete successfully
[00:33:58] The formula built, but is not symlinked into /usr/local
[00:33:58] Could not symlink bin/ccmake
[00:33:58] Target /usr/local/bin/ccmake
[00:33:58] already exists. You may want to remove it:
[00:33:58] rm '/usr/local/bin/ccmake'
[00:33:58]
[00:33:58] To force the link and overwrite all conflicting files:
[00:33:58] brew link --overwrite cmake
[00:33:58]
[00:33:58] To list all files that would be deleted:
[00:33:58] brew link --overwrite cmake --dry-run
[00:33:58]
[00:33:58] Possible conflicting files are:
[00:33:58] /usr/local/bin/ccmake -> /Applications/CMake.app/Contents/bin/ccmake
[00:33:58] /usr/local/bin/cmake -> /Applications/CMake.app/Contents/bin/cmake
[00:33:58] /usr/local/bin/cpack -> /Applications/CMake.app/Contents/bin/cpack
[00:33:58] /usr/local/bin/ctest -> /Applications/CMake.app/Contents/bin/ctest
[00:34:00] ==> Summary
[00:34:00] 🍺 /usr/local/Cellar/cmake/4.3.1: 4,041 files, 73.6MB, built in 31 minutes 24 seconds

the build files should be at the root of the repo. Can you figure out what's wrong?

Assistant: The issue is not in your build scripts — it's in the appveyor.yml init step for the macOS build. Specifically, line 81:

- brew install create-dmg

When Homebrew installs create-dmg, it pulls in cmake as a dependency. The AppVeyor macOS image already has CMake pre-installed (via /Applications/CMake.app), so when Homebrew tries to symlink its own cmake binaries into /usr/local/bin/, it conflicts with the existing symlinks pointing to the app bundle version.

The error itself (brew link not completing) is technically a non-fatal warning from Homebrew — the create-dmg tool doesn't actually need cmake at runtime (it only uses hdiutil and shell scripting). However, depending on how AppVeyor treats the exit code of that brew install command, it may cause the build to fail.

Fix

You have a couple of options:

Option 1: Force-overwrite the conflicting links (simplest)

Change line 81 in appveyor.yml to:

- HOMEBREW_NO_AUTO_UPDATE=1 brew install create-dmg || true
- brew link --overwrite cmake || true

Option 2: Unlink the pre-installed CMake first

- brew unlink cmake 2>/dev/null || true
- brew install create-dmg

Option 3 (recommended): Install create-dmg without upgrading dependencies

Since create-dmg is the only tool you actually need and it has no real dependency on cmake, prevent Homebrew from trying to upgrade/link cmake at all:

- HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install create-dmg

This environment variable tells Homebrew to skip checking/upgrading already-installed dependencies, which avoids the cmake symlink conflict entirely.

Summary

The root cause is a symlink conflict between the pre-installed CMake.app on the AppVeyor macOS image and Homebrew's cmake formula. When brew install create-dmg pulls in cmake as a dependency, it can't overwrite the existing /usr/local/bin/cmake symlinks. The fix is to either suppress the dependency check, force-overwrite the links, or unlink the pre-installed cmake before installing.

User: is there a way to use newer macOS in AppVeyor? do I pin it to a specific version somewhere?

Assistant: Yes! In your appveyor.yml, you're currently using the generic macOS image on line 12:

appveyor_build_worker_image: macOS

The generic macOS name maps to the oldest available macOS image, which is likely Monterey (12). You can pin to a newer version by using one of these specific image names:

Image name macOS version
macOS Oldest available (Monterey 12)
macos-monterey macOS 12 Monterey
macos-ventura macOS 13 Ventura
macos-sonoma macOS 14 Sonoma

To use the newest available image, change line 12 to:

appveyor_build_worker_image: macos-sonoma

This may also resolve (or at least reduce) the Homebrew/CMake conflict you're hitting, since newer images tend to have more up-to-date pre-installed software and fewer stale symlinks.

You can check exactly what's pre-install...

This pull request was created from Copilot chat.

Copilot AI changed the title [WIP] Update macOS build worker image to macos-sonoma ci: bump AppVeyor macOS image to Sonoma Mar 31, 2026
Copilot AI requested a review from KirillOsenkov March 31, 2026 23:24
@KirillOsenkov
KirillOsenkov marked this pull request as ready for review March 31, 2026 23:27
@KirillOsenkov
KirillOsenkov merged commit 8ab8953 into main Apr 1, 2026
1 check passed
@KirillOsenkov
KirillOsenkov deleted the copilot/update-macos-build-worker-image branch April 1, 2026 01:55
tknightnd pushed a commit to NewDayTechnology/benchmarkdotnet.analyser that referenced this pull request Jul 22, 2026
Updated
[Microsoft.Extensions.DependencyInjection](https://github.com/dotnet/dotnet)
from 10.0.9 to 10.0.10.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.DependencyInjection's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest)
from 18.7.0 to 18.8.1.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.NET.Test.Sdk's
releases](https://github.com/microsoft/vstest/releases)._

## 18.8.1

## What's Changed
* Fix protocol negotiation timeout when STJ reflection is disabled
(18.8.1) by @​nohwnd in microsoft/vstest#16281


**Full Changelog**:
microsoft/vstest@v18.8.0...v18.8.1

## 18.8.0

## What's Changed
* Migrate from Newtonsoft.Json to System.Text.Json / Jsonite (merge to
main) by @​nohwnd in microsoft/vstest#15687
- For more detail refer to
https://devblogs.microsoft.com/dotnet/vs-test-is-removing-its-newtonsoft-json-dependency/
* Create source-only filter package by @​Youssef1313 in
microsoft/vstest#15638
* Add ARM64 msdia140.dll support to test platform packages by @​nohwnd
in microsoft/vstest#15692
* Fix mutex cleanup crash on macOS/Linux by @​nohwnd in
microsoft/vstest#15684
* Restrict artifact temp directory permissions on Unix by @​nohwnd in
microsoft/vstest#15729
* Add support for filtering uncategorized tests with TestCategory=None
by @​Evangelink in microsoft/vstest#15727
* Fix SCI binding failure in DTA hosts (main) by @​nohwnd in
microsoft/vstest#15724
* Fix HTML logger parallel file collision by @​nohwnd in
microsoft/vstest#15435
* Improve error message when testhost cannot be found by @​nohwnd in
microsoft/vstest#16053
* Fix HTML logger exception on invalid XML chars in test display names
by @​nohwnd in microsoft/vstest#16051

**Full Changelog**:
microsoft/vstest@v18.7.0...v18.8.0

Commits viewable in [compare
view](microsoft/vstest@v18.7.0...v18.8.1).
</details>

Updated
[MSBuild.StructuredLogger](https://github.com/KirillOsenkov/MSBuildStructuredLog)
from 2.3.204 to 2.3.213.

<details>
<summary>Release notes</summary>

_Sourced from [MSBuild.StructuredLogger's
releases](https://github.com/KirillOsenkov/MSBuildStructuredLog/releases)._

## 2.3.213

## What's Changed
* ci: bump AppVeyor macOS image to Sonoma by @​KirillOsenkov with
@​Copilot in
KirillOsenkov/MSBuildStructuredLog#940
* Fix empty MSBuild version list when dotnet process exits early by
@​snechaev in
KirillOsenkov/MSBuildStructuredLog#942
* Fix PATH environment handling for macOS application bundles. Fixes
#​941 by @​snechaev in
KirillOsenkov/MSBuildStructuredLog#943
* [TracingView] Fix a case where fast mouse drawing cause the position
to jump unexpectedly by @​yuehuang010 in
KirillOsenkov/MSBuildStructuredLog#944
* Preserve search text during rebuild process in Avalonia version by
@​snechaev in
KirillOsenkov/MSBuildStructuredLog#946
* Bump package version and ship net10 by @​stan-sz in
KirillOsenkov/MSBuildStructuredLog#947
* Don't specify PublicKey on Mac by @​KirillOsenkov in
KirillOsenkov/MSBuildStructuredLog#948
* Avalonia 12 support by @​maxkatz6 in
KirillOsenkov/MSBuildStructuredLog#937
* [macOS] Allow to run multiple instances by @​snechaev in
KirillOsenkov/MSBuildStructuredLog#949
* Add search field to Files tab in Avalonia version by @​rolfbjarne in
KirillOsenkov/MSBuildStructuredLog#951
* Bump DotUtils SensitiveDataDetector to 1.0.0 by @​YuliiaKovalova in
KirillOsenkov/MSBuildStructuredLog#953
* Add MSBuild Server lifecycle node support (binlog format v27) by
@​JanProvaznik in
KirillOsenkov/MSBuildStructuredLog#955

## New Contributors
* @​KirillOsenkov with @​Copilot made their first contribution in
KirillOsenkov/MSBuildStructuredLog#940
* @​rolfbjarne made their first contribution in
KirillOsenkov/MSBuildStructuredLog#951

**Full Changelog**:
KirillOsenkov/MSBuildStructuredLog@v2.3.154...v2.3.213

Commits viewable in [compare
view](https://github.com/KirillOsenkov/MSBuildStructuredLog/commits/v2.3.213).
</details>

Updated [NSubstitute](https://github.com/nsubstitute/NSubstitute) from
5.3.0 to 6.0.0.

<details>
<summary>Release notes</summary>

_Sourced from [NSubstitute's
releases](https://github.com/nsubstitute/NSubstitute/releases)._

## 6.0.0

:information_source: No changes from [Release Candidate
1](https://github.com/nsubstitute/NSubstitute/releases/tag/v6.0.0-rc.1).

# NSubstitute v6.0.0 

From
[RC1](https://github.com/nsubstitute/NSubstitute/releases/tag/v6.0.0-rc.1)
notes:

* [NEW] `ArgMatchers.Matching` predicate matcher as an alternative to
`Is(Expression<Predicate<T>>`. (.NET6 and above.)
* [UPDATE] Improved support for custom argument matchers. `Arg.Is` now
accepts arg matchers.
* [UPDATE][BREAKING] Update target frameworks: .NET8, .NET Standard 2.0
* [UPDATE][BREAKING] Remove legacy obsolete API
* [UPDATE][BREAKING] Mark as obsolete api CompatArg with pre c# 7.0
support
* [UPDATE][BREAKING] Nullability is enabled for public api for .NET 8+
TFMs
* [UPDATE] Migrate documentation to [docfx
platform](https://github.com/dotnet/docfx) and update samples to NUnit 4
* [NEW] Added NuGet Package README file.


## Full change list

* Update target frameworks and other infrastructure changes by @​Romfos
in nsubstitute/NSubstitute#831
* Remove Google Groups hyperlinks by @​304NotModified in
nsubstitute/NSubstitute#804
* Improve output for expected argument matchers in
nsubstitute/NSubstitute#806
* Mark Substitute.For<T> method as Pure by @​Dzliera in
nsubstitute/NSubstitute#844
* Move package creating from build.fsproj to github actions by @​Romfos
in nsubstitute/NSubstitute#838
* Added .NET 9 to test matrix by @​Romfos in
nsubstitute/NSubstitute#848
* Update dependencies by @​Saibamen in
nsubstitute/NSubstitute#843
* Migrate documentation to docfx by @​Romfos in
nsubstitute/NSubstitute#850
* Added test for issue #​716 by @​rbeurskens in
nsubstitute/NSubstitute#846
* feat: add dependabot for this project for minor and patch updates for
nuget packages and github actions by @​wmundev in
nsubstitute/NSubstitute#792
* #​853 Fix matching with multiple generic arguments of the same type by
@​rholek in nsubstitute/NSubstitute#858
* Ability to mock protected methods with and without return value by
@​Jason31569 in nsubstitute/NSubstitute#845
* Enable nullability for public api by @​Romfos in
nsubstitute/NSubstitute#856
* Bugfix/async event handlers return instantly by @​jmartschinke in
nsubstitute/NSubstitute#808
* Fix matching generic calls with AnyType when the generic argument is
also a generic argument in return type, out or ref parameter by
@​JMolenkamp in nsubstitute/NSubstitute#862
* Feature: allow interception of any generic method call when using
Arg.AnyType by @​JMolenkamp in
nsubstitute/NSubstitute#855
* Params arg unit test by @​Jason31569 in
nsubstitute/NSubstitute#874
* Added exception extensions for ValueTask without return type (rebase)
in nsubstitute/NSubstitute#873
* Migrate to slnx by @​Romfos in
nsubstitute/NSubstitute#882
* Migrate documentation validation from build.fsproj to Roslyn code
generator by @​Romfos in
nsubstitute/NSubstitute#883
* Fix doc links (#​884) in
nsubstitute/NSubstitute#886
* Add PackageReadmeFile. by @​peymanr34 in
nsubstitute/NSubstitute#888
* Make public api and tests the same for all TFMs by @​Romfos in
nsubstitute/NSubstitute#885
* Migrate documentation samples to NUnit4 by @​Romfos in
nsubstitute/NSubstitute#889
* Run unit tests in Microsoft.Testing.Platform mode by @​Romfos in
nsubstitute/NSubstitute#896
* Bump actions/checkout from 4 to 5 by @​dependabot[bot] in
nsubstitute/NSubstitute#902
* Fix typo in return value documentation by @​ericmutta in
nsubstitute/NSubstitute#903
* Bump actions/setup-dotnet from 4 to 5 by @​dependabot[bot] in
nsubstitute/NSubstitute#907
* Fix typo in received calls documentation by @​ericmutta in
nsubstitute/NSubstitute#904
* Simplify github actions to use less jobs by @​Romfos in
nsubstitute/NSubstitute#911
* Bump actions/upload-artifact from 4 to 5 by @​dependabot[bot] in
nsubstitute/NSubstitute#916
* Bump NUnit3TestAdapter from 5.0.0 to 5.2.0 by @​dependabot[bot] in
nsubstitute/NSubstitute#922
 ... (truncated)

## 6.0.0-rc.1

# NSubstitute v6.0.0 Release Candidate 1

Due to the large number of changes in this release, we wanted to start
with a release candidate to ensure we've correctly captured breaking
changes.

* [NEW] `ArgMatchers.Matching` predicate matcher as an alternative to
`Is(Expression<Predicate<T>>`. (.NET6 and above.)
* [UPDATE] Improved support for custom argument matchers. `Arg.Is` now
accepts arg matchers.
* [UPDATE][BREAKING] Update target frameworks: .NET8, .NET Standard 2.0
* [UPDATE][BREAKING] Remove legacy obsolete API
* [UPDATE][BREAKING] Mark as obsolete api CompatArg with pre c# 7.0
support
* [UPDATE][BREAKING] Nullability is enabled for public api for .NET 8+
TFMs
* [UPDATE] Migrate documentation to [docfx
platform](https://github.com/dotnet/docfx) and update samples to NUnit 4
* [NEW] Added NuGet Package README file.


## Full change list

* Update target frameworks and other infrastructure changes by @​Romfos
in nsubstitute/NSubstitute#831
* Remove Google Groups hyperlinks by @​304NotModified in
nsubstitute/NSubstitute#804
* Improve output for expected argument matchers in
nsubstitute/NSubstitute#806
* Mark Substitute.For<T> method as Pure by @​Dzliera in
nsubstitute/NSubstitute#844
* Move package creating from build.fsproj to github actions by @​Romfos
in nsubstitute/NSubstitute#838
* Added .NET 9 to test matrix by @​Romfos in
nsubstitute/NSubstitute#848
* Update dependencies by @​Saibamen in
nsubstitute/NSubstitute#843
* Migrate documentation to docfx by @​Romfos in
nsubstitute/NSubstitute#850
* Added test for issue #​716 by @​rbeurskens in
nsubstitute/NSubstitute#846
* feat: add dependabot for this project for minor and patch updates for
nuget packages and github actions by @​wmundev in
nsubstitute/NSubstitute#792
* #​853 Fix matching with multiple generic arguments of the same type by
@​rholek in nsubstitute/NSubstitute#858
* Ability to mock protected methods with and without return value by
@​Jason31569 in nsubstitute/NSubstitute#845
* Enable nullability for public api by @​Romfos in
nsubstitute/NSubstitute#856
* Bugfix/async event handlers return instantly by @​jmartschinke in
nsubstitute/NSubstitute#808
* Fix matching generic calls with AnyType when the generic argument is
also a generic argument in return type, out or ref parameter by
@​JMolenkamp in nsubstitute/NSubstitute#862
* Feature: allow interception of any generic method call when using
Arg.AnyType by @​JMolenkamp in
nsubstitute/NSubstitute#855
* Params arg unit test by @​Jason31569 in
nsubstitute/NSubstitute#874
* Added exception extensions for ValueTask without return type (rebase)
in nsubstitute/NSubstitute#873
* Migrate to slnx by @​Romfos in
nsubstitute/NSubstitute#882
* Migrate documentation validation from build.fsproj to Roslyn code
generator by @​Romfos in
nsubstitute/NSubstitute#883
* Fix doc links (#​884) in
nsubstitute/NSubstitute#886
* Add PackageReadmeFile. by @​peymanr34 in
nsubstitute/NSubstitute#888
* Make public api and tests the same for all TFMs by @​Romfos in
nsubstitute/NSubstitute#885
* Migrate documentation samples to NUnit4 by @​Romfos in
nsubstitute/NSubstitute#889
* Run unit tests in Microsoft.Testing.Platform mode by @​Romfos in
nsubstitute/NSubstitute#896
* Bump actions/checkout from 4 to 5 by @​dependabot[bot] in
nsubstitute/NSubstitute#902
* Fix typo in return value documentation by @​ericmutta in
nsubstitute/NSubstitute#903
* Bump actions/setup-dotnet from 4 to 5 by @​dependabot[bot] in
nsubstitute/NSubstitute#907
* Fix typo in received calls documentation by @​ericmutta in
nsubstitute/NSubstitute#904
* Simplify github actions to use less jobs by @​Romfos in
nsubstitute/NSubstitute#911
* Bump actions/upload-artifact from 4 to 5 by @​dependabot[bot] in
nsubstitute/NSubstitute#916
* Bump NUnit3TestAdapter from 5.0.0 to 5.2.0 by @​dependabot[bot] in
nsubstitute/NSubstitute#922
* Bump BenchmarkDotNet from 0.15.2 to 0.15.5 by @​dependabot[bot] in
nsubstitute/NSubstitute#921
* Add .NET 10 to test matrix by @​Romfos in
nsubstitute/NSubstitute#913
 ... (truncated)

Commits viewable in [compare
view](nsubstitute/NSubstitute@v5.3.0...v6.0.0).
</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants